

ssize_t rio_readnb(rio_t *rp,void *usrbuf,size_t n)
{
  size_t nleft=n;
  ssize_t nread;
  char *bufp=usrbuf;

  while(nleft>0)
{
  if((nread=rio_read(rp,bufp,nleft))<0)
{
   if(errno==EINTR)
    nread=0;
   else
    return -1;
}
else if(nread==0)
break;
nleft-=nread;
bufp+=nread;
}
return (n-nleft);
}

